home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / mint / lib / mntlib44.zoo / mntlib / sigblock.c < prev    next >
C/C++ Source or Header  |  1992-09-05  |  834b  |  59 lines

  1. /* signal blocking stuff for MiNT */
  2.  
  3. #include <signal.h>
  4. #include <errno.h>
  5. #include <mintbind.h>
  6. #include <unistd.h>
  7.  
  8. extern int __mint;
  9. extern long _sigpending, _sigmask;
  10.  
  11. static void checksigs __PROTO((void));
  12.  
  13. /* checksigs: for TOS: this checks to see if we just unmasked any
  14.  * pending signals
  15.  */
  16.  
  17. static void
  18. checksigs()
  19. {
  20.     register int sig;
  21.     register long send;
  22.  
  23.     if ((send = (_sigpending & ~_sigmask)) != 0) {
  24.         for (sig = 0; sig < NSIG; sig++) {
  25.             if (send & (1L << sig))
  26.                 kill(0, sig);
  27.         }
  28.     }
  29. }
  30.  
  31. long
  32. sigsetmask(mask)
  33.     long mask;
  34. {
  35.     register long omask;
  36.  
  37.     if (__mint)
  38.         return Psigsetmask(mask);
  39.  
  40.     omask = _sigmask;
  41.     _sigmask = mask;
  42.     checksigs();
  43.     return omask;
  44. }
  45.  
  46. long
  47. sigblock(mask)
  48.     long mask;
  49. {
  50.     register long omask;
  51.  
  52.     if (__mint)
  53.         return Psigblock(mask);
  54.  
  55.     omask = _sigmask;
  56.     _sigmask |= mask;
  57.     return omask;
  58. }
  59.